Intelligent systems, such as intelligent automated assistants, that are capable of interacting with humans (e.g., by observing user behavior, communicating with users, understanding observed situations, anticipating what a user may need and acting to produce useful behavior) are valuable in a variety of situations. For example, such systems may assist individuals who are impaired in some way (e.g., visually, auditorially, physically, cognitively, etc.), including elderly people (who may be stricken by one or more ailments), surgeons (whose eyes, hands and brains are constantly busy when performing operations) and business executives (who may have numerous tasks to accomplish), among others.
To accomplish all of these objectives, intelligent automated assistants integrate a variety of capabilities provided by different software components (e.g., for supporting natural language recognition, multimodal input, managing distributed services, etc.). Development of a system incorporating these different software components typically requires knowledge of numerous different programming languages and artificial intelligence-based methods. Thus, the development of an intelligent automated assistant is a complex task that typically requires contribution from a plurality of highly skilled individuals each having expertise in different aspects of programming; it is nearly impossible for a lone software developer to build an intelligent automated assistant due to the breadth and variety of expertise that is required to build the system. The typical development process for building intelligent automated assistants is therefore relatively inefficient in terms of time, cost and manpower.
Thus, there is a need in the art for a method and apparatus for building an intelligent automated assistant.